package br.com.senac.digipao.dao;

import br.com.senac.digipao.bean.Cliente;
import br.com.senac.digipao.bean.Fornecedor;
import br.com.senac.digipao.connection.ConexaoDB;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

public class FornecedorDao {

    static PreparedStatement ps;

    // a conexão com o banco de dados
    private final Connection conexao;

    public FornecedorDao() throws SQLException {
        this.conexao = new ConexaoDB().getConexao();
    }

    public void adicionaFornecedor(Fornecedor fornecedor) throws SQLException {
        // prepara a conexão
        String sql = "insert into tb_fornecedor(idFornecedor,fornecedor,descricao,preco,endereco,cidade,estado,telefone) values ( ? , ? , ? ,? , ? , ? ,? , ? )";

        try (PreparedStatement stmt = conexao.prepareStatement(sql)) {

            stmt.setInt(1, fornecedor.getIdFornecedor());
            stmt.setString(2, fornecedor.getFornecedor());
            stmt.setString(3, fornecedor.getDescricao());
            stmt.setString(4, fornecedor.getPreco());
            stmt.setString(5, fornecedor.getEndereco());
            stmt.setString(6, fornecedor.getCidade());
            stmt.setString(7, fornecedor.getEstado());
            stmt.setString(8, fornecedor.getTelefone());
            
            //Executa o código SQL
            stmt.execute();
            stmt.close();
        }
    }

    public void alteraFornecedor(Fornecedor fornecedor) throws SQLException {
        String sql = "update tb_fornecedor set fornecedor= ?,descricao= ?,preco= ?,endereco= ?,cidade= ?,estado= ?,telefone= ? where idFornecedor= ?";

        try (PreparedStatement stmt = this.conexao.prepareStatement(sql)) {
          
            stmt.setString(1, fornecedor.getFornecedor());
            stmt.setString(2, fornecedor.getDescricao());
            stmt.setString(3, fornecedor.getPreco());
            stmt.setString(4, fornecedor.getEndereco());
            stmt.setString(5, fornecedor.getCidade());
            stmt.setString(6, fornecedor.getEstado());
            stmt.setString(7, fornecedor.getTelefone());
              stmt.setInt(8, fornecedor.getIdFornecedor());

            //executar a query
            stmt.execute();
            stmt.close();
        }
    }
    
    
      public List<Fornecedor> listaFornecedoresPorParametro(String parametro) throws SQLException {
        // prepara a conexão
        boolean duplicado = false;
        List<Fornecedor> listaFornecedor = new ArrayList<>();

        String sql = "select * from tb_fornecedor where fornecedor LIKE '%" + parametro + "%'";

        PreparedStatement preparedStatement = conexao.prepareStatement(sql);
        ResultSet rs = preparedStatement.executeQuery(sql);

        while (rs.next()) {
            Fornecedor fornecedor = new Fornecedor();
            fornecedor.setIdFornecedor(rs.getInt("idFornecedor")); 
            fornecedor.setFornecedor(rs.getString("fornecedor"));
            fornecedor.setDescricao(rs.getString("descricao"));
            fornecedor.setPreco(rs.getString("preco"));
            fornecedor.setEndereco(rs.getString("endereco"));
            fornecedor.setCidade(rs.getString("cidade"));
            fornecedor.setEstado(rs.getString("estado"));
            fornecedor.setTelefone(rs.getString("telefone"));
            listaFornecedor.add(fornecedor);
        }

        sql = "select * from tb_fornecedor where descricao LIKE '%" + parametro + "%'";

        preparedStatement = conexao.prepareStatement(sql);
        rs = preparedStatement.executeQuery(sql);

        while (rs.next()) {
           duplicado = false;
            for (int i = 0; i < listaFornecedor.size(); i++) {
                if (listaFornecedor.get(i).getIdFornecedor() == rs.getInt("idFornecedor")) {
                    duplicado = true;
                    break;
                }
            }
            if (!duplicado) {
                Fornecedor fornecedor = new Fornecedor();
                fornecedor.setIdFornecedor(rs.getInt("idFornecedor")); 
                fornecedor.setFornecedor(rs.getString("fornecedor"));
                fornecedor.setDescricao(rs.getString("descricao"));
                fornecedor.setPreco(rs.getString("preco"));
                fornecedor.setEndereco(rs.getString("endereco"));
                fornecedor.setCidade(rs.getString("cidade"));
                fornecedor.setEstado(rs.getString("estado"));
                fornecedor.setTelefone(rs.getString("telefone"));
                listaFornecedor.add(fornecedor);
            }
        }

        sql = "select * from tb_fornecedor where preco LIKE '%" + parametro + "%'";

        preparedStatement = conexao.prepareStatement(sql);
        rs = preparedStatement.executeQuery(sql);

        while (rs.next()) {
           duplicado = false;
            for (int i = 0; i < listaFornecedor.size(); i++) {
                if (listaFornecedor.get(i).getIdFornecedor() == rs.getInt("idFornecedor")) {
                    duplicado = true;
                    break;
                }
            }
                Fornecedor fornecedor = new Fornecedor();
                fornecedor.setIdFornecedor(rs.getInt("idFornecedor")); 
                fornecedor.setFornecedor(rs.getString("fornecedor"));
                fornecedor.setDescricao(rs.getString("descricao"));
                fornecedor.setPreco(rs.getString("preco"));
                fornecedor.setEndereco(rs.getString("endereco"));
                fornecedor.setCidade(rs.getString("cidade"));
                fornecedor.setEstado(rs.getString("estado"));
                fornecedor.setTelefone(rs.getString("telefone"));
                listaFornecedor.add(fornecedor);
                duplicado = false;
            }
        

        sql = "select * from tb_fornecedor where endereco LIKE '%" + parametro + "%'";

        preparedStatement = conexao.prepareStatement(sql);
        rs = preparedStatement.executeQuery(sql);

        while (rs.next()) {
             duplicado = false;
            for (int i = 0; i < listaFornecedor.size(); i++) {
                if (listaFornecedor.get(i).getIdFornecedor() == rs.getInt("idFornecedor")) {
                    duplicado = true;
                    break;
                }
            }
            if (!duplicado) {
                Fornecedor fornecedor = new Fornecedor();
                fornecedor.setIdFornecedor(rs.getInt("idFornecedor")); 
                fornecedor.setFornecedor(rs.getString("fornecedor"));
                fornecedor.setDescricao(rs.getString("descricao"));
                fornecedor.setPreco(rs.getString("preco"));
                fornecedor.setEndereco(rs.getString("endereco"));
                fornecedor.setCidade(rs.getString("cidade"));
                fornecedor.setEstado(rs.getString("estado"));
                fornecedor.setTelefone(rs.getString("telefone"));
                listaFornecedor.add(fornecedor);
                duplicado = false;
            }
        }

        sql = "select * from tb_fornecedor where cidade LIKE '%" + parametro + "%'";

        preparedStatement = conexao.prepareStatement(sql);
        rs = preparedStatement.executeQuery(sql);

        while (rs.next()) {
             duplicado = false;
            for (int i = 0; i < listaFornecedor.size(); i++) {
                if (listaFornecedor.get(i).getIdFornecedor() == rs.getInt("idFornecedor")) {
                    duplicado = true;
                    break;
                }
            }
            if (!duplicado) {
                 Fornecedor fornecedor = new Fornecedor();
                fornecedor.setIdFornecedor(rs.getInt("idFornecedor")); 
                fornecedor.setFornecedor(rs.getString("fornecedor"));
                fornecedor.setDescricao(rs.getString("descricao"));
                fornecedor.setPreco(rs.getString("preco"));
                fornecedor.setEndereco(rs.getString("endereco"));
                fornecedor.setCidade(rs.getString("cidade"));
                fornecedor.setEstado(rs.getString("estado"));
                fornecedor.setTelefone(rs.getString("telefone"));
                listaFornecedor.add(fornecedor);
                duplicado = false;
            }
        }

        sql = "select * from tb_fornecedor where estado LIKE '%" + parametro + "%'";

        preparedStatement = conexao.prepareStatement(sql);
        rs = preparedStatement.executeQuery(sql);

        while (rs.next()) {
             duplicado = false;
            for (int i = 0; i < listaFornecedor.size(); i++) {
                if (listaFornecedor.get(i).getIdFornecedor() == rs.getInt("idFornecedor")) {
                    duplicado = true;
                    break;
                }
            }
            if (!duplicado) {
                Fornecedor fornecedor = new Fornecedor();
                fornecedor.setIdFornecedor(rs.getInt("idFornecedor")); 
                fornecedor.setFornecedor(rs.getString("fornecedor"));
                fornecedor.setDescricao(rs.getString("descricao"));
                fornecedor.setPreco(rs.getString("preco"));
                fornecedor.setEndereco(rs.getString("endereco"));
                fornecedor.setCidade(rs.getString("cidade"));
                fornecedor.setEstado(rs.getString("estado"));
                fornecedor.setTelefone(rs.getString("telefone"));
                listaFornecedor.add(fornecedor);
                duplicado = false;
            }
        }

        sql = "select * from tb_fornecedor where telefone LIKE '%" + parametro + "%'";

        preparedStatement = conexao.prepareStatement(sql);
        rs = preparedStatement.executeQuery(sql);

        while (rs.next()) {
             duplicado = false;
            for (int i = 0; i < listaFornecedor.size(); i++) {
                if (listaFornecedor.get(i).getIdFornecedor() == rs.getInt("idFornecedor")) {
                    duplicado = true;
                    break;
                }
            }
            if (!duplicado) {
                 Fornecedor fornecedor = new Fornecedor();
                fornecedor.setIdFornecedor(rs.getInt("idFornecedor")); 
                fornecedor.setFornecedor(rs.getString("fornecedor"));
                fornecedor.setDescricao(rs.getString("descricao"));
                fornecedor.setPreco(rs.getString("preco"));
                fornecedor.setEndereco(rs.getString("endereco"));
                fornecedor.setCidade(rs.getString("cidade"));
                fornecedor.setEstado(rs.getString("estado"));
                fornecedor.setTelefone(rs.getString("telefone"));
                listaFornecedor.add(fornecedor);
                duplicado = false;
            }
        }

        return listaFornecedor;
    }
    
    public Fornecedor buscaFornecedorPorId(int id) throws SQLException {
        
        String sql = "select * from tb_fornecedor where idFornecedor = " + id ;
        
        PreparedStatement preparedStatement = conexao.prepareStatement(sql);
        ResultSet rs = preparedStatement.executeQuery(sql);

        Fornecedor fornecedor = new Fornecedor();

        while (rs.next()) {
                fornecedor.setIdFornecedor(rs.getInt("idFornecedor")); 
                fornecedor.setFornecedor(rs.getString("fornecedor"));
                fornecedor.setDescricao(rs.getString("descricao"));
                fornecedor.setPreco(rs.getString("preco"));
                fornecedor.setEndereco(rs.getString("endereco"));
                fornecedor.setCidade(rs.getString("cidade"));
                fornecedor.setEstado(rs.getString("estado"));
                fornecedor.setTelefone(rs.getString("telefone"));
        }

        return fornecedor;
    }
    
    public void excluiFornecedorPorId(int id) {
        String sql = "delete from tb_Fornecedor where idFornecedor = " + id ;
        
        try {
            PreparedStatement stmt = this.conexao.prepareStatement(sql);
            stmt.execute();
            stmt.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDao.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}
